package ventanas;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;

import recursos.MaestroInternalFrame;
import recursos.Sesion;
import recursos.TextFilterDocument;

import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.ListSelectionModel;

import bean.Usuario;
import controlador.MantenimientoUsuarioController;

import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;

import org.jdesktop.swingx.JXTable;

import javax.swing.JPanel;
import javax.swing.border.TitledBorder;

public class FIMantenimientoUsuario extends MaestroInternalFrame {
	
	private static final long serialVersionUID = 1L;
	private JTextField txtNombres;
	private JTextField txtUsuario;
	private JTextField txtContrasena;
	private JLabel lblNombres;
	private JLabel lblContrasena;
	private JLabel lblUsuario;
	private TextFilterDocument tfdNombres = new TextFilterDocument(50);
	private TextFilterDocument tfdUsuario = new TextFilterDocument(10);
	private TextFilterDocument tfdContrasena = new TextFilterDocument(10);
	private JScrollPane scpListado;
	private DefaultTableModel dtmListado;
	private JXTable tbListado;
	private String[] cabecera={"Usuario","Clave","Nombres"};
	private String[][] datos;
	private JPanel pnlBusqueda;
	private JTextField txtUsuarioB;
	private JTextField txtNombresB;
	private JLabel lblUsuarioB;
	private JLabel lblNombresB;
	private JButton btnConsultar;
	private int operacion = -1;
	
	public FIMantenimientoUsuario() {
		setVisible(true);
		setSize(459, 463);
		setTitle(Sesion.titulo+"-"+Sesion.tifMantenimiento);
		toolBar.setVisible(true);
		btnEliminar.setVisible(true);
		btnModificar.setVisible(true);
		btnNuevo.setVisible(true);
		btnCancelar.setVisible(true);
		btnGuardar.setVisible(true);
		btnSalir.setVisible(true);
		
		lblUsuario = new JLabel("Usuario:");
		lblUsuario.setBounds(10, 17, 87, 14);
		contenedorCenter.add(lblUsuario);
		
		lblNombres = new JLabel("Nombres:");
		lblNombres.setBounds(10, 42, 87, 14);
		contenedorCenter.add(lblNombres);
		
		txtNombres = new JTextField();
		txtNombres.setBounds(76, 36, 355, 20);
		txtNombres.setDocument(tfdNombres);
		contenedorCenter.add(txtNombres);
		
		txtUsuario = new JTextField();
		txtUsuario.setBounds(76, 11, 105, 20);
		txtUsuario.setDocument(tfdUsuario);
		contenedorCenter.add(txtUsuario);
		
		
		lblContrasena = new JLabel("Contrese\u00F1a:");
		lblContrasena.setBounds(191, 17, 87, 14);
		contenedorCenter.add(lblContrasena);
		
		txtContrasena = new JTextField();
		txtContrasena.setBounds(278, 11, 153, 20);
		txtContrasena.setDocument(tfdContrasena);
		contenedorCenter.add(txtContrasena);
		
		pnlBusqueda = new JPanel();
		pnlBusqueda.setBorder(new TitledBorder(null, "Busqueda", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		pnlBusqueda.setBounds(10, 67, 421, 328);
		contenedorCenter.add(pnlBusqueda);
		pnlBusqueda.setLayout(null);
		
		dtmListado = new DefaultTableModel(datos, cabecera);
		tbListado = new JXTable(dtmListado);
		tbListado.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		tbListado.getTableHeader().setReorderingAllowed(false);
		tbListado.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		tbListado.setEditable(false);
		tbListado.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent e) {
				pintar();
			}
		});
		tbListado.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent e) {
				pintar();
			}
		});
		scpListado = new JScrollPane(tbListado);
		scpListado.setBounds(10, 46, 401, 271);
		pnlBusqueda.add(scpListado);
		
		lblUsuarioB = new JLabel("Usuario:");
		lblUsuarioB.setBounds(10, 21, 55, 14);
		pnlBusqueda.add(lblUsuarioB);
		
		txtUsuarioB = new JTextField();
		txtUsuarioB.setBounds(67, 18, 73, 20);
		pnlBusqueda.add(txtUsuarioB);
		
		lblNombresB = new JLabel("Nombres:");
		lblNombresB.setBounds(150, 21, 62, 14);
		pnlBusqueda.add(lblNombresB);
		
		txtNombresB = new JTextField();
		txtNombresB.setBounds(206, 18, 111, 20);
		pnlBusqueda.add(txtNombresB);
		
		btnConsultar = new JButton("Consultar");
		btnConsultar.setBounds(325, 17, 86, 23);
		pnlBusqueda.add(btnConsultar);
		
		limpiarTabla();
		activaControles();
	}
	
	public void limpiarTabla(){
		tbListado.setModel(dtmListado = new DefaultTableModel(datos,cabecera));
		tbListado.getColumn(0).setPreferredWidth(90);
		tbListado.getColumn(1).setPreferredWidth(90);
		tbListado.getColumn(2).setPreferredWidth(215);
	}
	
	public void cargarTabla(Usuario usuario){
		limpiarTabla();
		Object[] datos = {usuario.getUsuario(),usuario.getClave(),usuario.getDescripcion()};
		dtmListado.addRow(datos);
	}
	
	public void cargarTabla(List<Usuario> usuarios){
		limpiarTabla();
		for (Usuario usuario : usuarios) {
			Object[] datos = {usuario.getUsuario(),usuario.getClave(),usuario.getDescripcion()};
			dtmListado.addRow(datos);
		}
	}
	
	public JXTable getTbListado(){
		return tbListado;
	}
		
	public JButton getBtnNuevo(){
		return btnNuevo;
	}
	
	public JButton getBtnModificar() {
		return btnModificar;
	}
	public JButton getBtnEliminar() {
		return btnEliminar;
	}
	public JButton getBtnSalir() {
		return btnSalir;
	}
	public JButton getBtnGuardar() {
		return btnGuardar;
	}
	
	public JButton getBtnCancelar() {
		return btnCancelar;
	}
	
	public JButton getBtnConsultar() {
		return btnConsultar;
	}
	
	public String getUsuario(){
		return txtUsuario.getText().trim().toUpperCase();
	}
	
	public String getUsuarioB(){
		return txtUsuarioB.getText().trim().toUpperCase();
	}
	
	public String getContrasena(){
		return txtContrasena.getText().trim().toUpperCase();
	}
	
	public String getNombres() {
		return txtNombres.getText().trim().toUpperCase();
	}
	
	public String getNombresB() {
		return txtNombresB.getText().trim().toUpperCase();
	}

	public void limpiarCampos(){
		txtUsuario.setText("");
		txtContrasena.setText("");
		txtNombres.setText("");
	}
	
	public void activaControles() {
		btnNuevo.setEnabled(true);
		btnModificar.setEnabled(true);
		btnEliminar.setEnabled(true);

		scpListado.setEnabled(true);
		txtNombresB.setEnabled(true);
		txtUsuarioB.setEnabled(true);
		btnConsultar.setEnabled(true);
		
		txtNombres.setEnabled(false);
		txtUsuario.setEnabled(false);
		txtContrasena.setEnabled(false);
				
		btnCancelar.setEnabled(false);
		btnGuardar.setEnabled(false);
		
		txtUsuarioB.requestFocus();
	}

	public void desactivaControles() {
		btnNuevo.setEnabled(false);
		btnModificar.setEnabled(false);
		btnEliminar.setEnabled(false);

		scpListado.setEnabled(false);
		txtNombresB.setEnabled(false);
		txtUsuarioB.setEnabled(false);
		btnConsultar.setEnabled(false);
		limpiarTabla();

		btnCancelar.setEnabled(true);
		btnGuardar.setEnabled(true);
		txtNombres.setEnabled(true);
		txtContrasena.setEnabled(true);
		
		if(operacion==1){
			txtUsuario.setEnabled(false);
			txtContrasena.requestFocus();
		}else{
			txtUsuario.setEnabled(true);
			txtUsuario.requestFocus();
		}

		
	}
	
	public void limpiarBuscar() {
		txtNombresB.setText("");
		txtUsuarioB.setText("");
	}
	
	private void pintar(){
		if (tbListado.getSelectedRow() > -1) {
			String usuario = tbListado.getValueAt(
					tbListado.getSelectedRow(), 0).toString().trim();
			String clave = tbListado.getValueAt(
					tbListado.getSelectedRow(), 1).toString().trim();
			String nombres = tbListado.getValueAt(
					tbListado.getSelectedRow(), 2).toString().trim();
			
			txtUsuario.setText(usuario);
			txtContrasena.setText(clave);
			txtNombres.setText(nombres);
		}
	}
	
	public int getOperacion() {
		return operacion;
	}

	public void setOperacion(int operacion) {
		this.operacion = operacion;
	}

	public void setControlador(MantenimientoUsuarioController controlador){
		btnSalir.addActionListener(controlador);
		btnEliminar.addActionListener(controlador);
		btnModificar.addActionListener(controlador);
		btnNuevo.addActionListener(controlador);
		btnCancelar.addActionListener(controlador);
		btnGuardar.addActionListener(controlador);
		btnConsultar.addActionListener(controlador);
	}
}
